/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.unesp.demac.bcc.soo.dao;

import br.unesp.demac.bcc.soo.bean.Contato;
import br.unesp.demac.bcc.soo.bean.Endereco;
import br.unesp.demac.bcc.soo.wsClient.Login;
import br.unesp.demac.bcc.soo.bean.Pessoa;
import br.unesp.demac.bcc.soo.util.FabricaConexao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

/**
 *
 * @author flavioam
 */
public class PessoaDAOImp implements PessoaDAO {

   
    @Override
    public ArrayList<Pessoa> selecionaTodosClientes() {

        ArrayList<Pessoa> l = new ArrayList<Pessoa>();
        Connection con = null;

        try {

            con = FabricaConexao.getConexao();

            String sql = "select * from Pessoas where idPessoas not in (select Pessoas_idPessoas from Funcionarios)";

            PreparedStatement pstmt = con.prepareStatement(sql);

            ResultSet rs = pstmt.executeQuery();

            while (rs.next()) {

                Pessoa p = new Pessoa();
                p.setNome(rs.getString("nome"));
                p.setCpf(rs.getString("cpf"));
                p.setIdPessoa(rs.getInt("idPessoas"));

                LoginDAO lDao = new LoginDAOImp();
                br.unesp.demac.bcc.soo.bean.Login login = lDao.selecionaLoginByIdPessoa(p.getIdPessoa());
                p.setLogin(login);

                EnderecoDAO eDao = new EnderecoDAOImp();
                Endereco end = eDao.selecionaEnderecoByIdPessoa(p.getIdPessoa());
                p.setEndereco(end);

                ContatoDAO cDao = new ContatoDAOImp();
                Contato cont = cDao.selecionaContadoByIdPessoa(p.getIdPessoa());
                p.setContato(cont);

                l.add(p);

            }

        } catch (SQLException e) {

            throw new Exception(e.getMessage());

        } catch (Exception e) {

            throw new Exception(e.getMessage());

        } finally {
               FabricaConexao.fechar(con);
            return l;
        }
    }
    
   @Override
    public Pessoa selecionaClienteById(int id) {

        Pessoa p = null;
        Connection con = null;

        try {

            con = FabricaConexao.getConexao();

            String sql = "select * from Pessoas where idPessoas  = ?";

            PreparedStatement pstmt = con.prepareStatement(sql);
            pstmt.setInt(1, id);

            ResultSet rs = pstmt.executeQuery();

            if(rs.next()) {

                p = new Pessoa();
                p.setNome(rs.getString("nome"));
                p.setCpf(rs.getString("cpf"));
                p.setIdPessoa(rs.getInt("idPessoas"));

                LoginDAO lDao = new LoginDAOImp();
                br.unesp.demac.bcc.soo.bean.Login login = lDao.selecionaLoginByIdPessoa(p.getIdPessoa());
                p.setLogin(login);

                EnderecoDAO eDao = new EnderecoDAOImp();
                Endereco end = eDao.selecionaEnderecoByIdPessoa(p.getIdPessoa());
                p.setEndereco(end);

                ContatoDAO cDao = new ContatoDAOImp();
                Contato cont = cDao.selecionaContadoByIdPessoa(p.getIdPessoa());
                p.setContato(cont);

            }

        } catch (SQLException e) {

            throw new Exception(e.getMessage());

        } catch (Exception e) {

            throw new Exception(e.getMessage());

        } finally {
               FabricaConexao.fechar(con);
            return p;
        }
    }
   
   @Override
    public Pessoa selecionaClienteByLogin(Login l) {

        Pessoa p = null;
        Connection con = null;

        try {

            con = FabricaConexao.getConexao();

            String sql = "select * from locadora.Pessoas where idPessoas  = (select Pessoas_idPessoas from locadora.Logins where usuario = ?)";

            PreparedStatement pstmt = con.prepareStatement(sql);
            pstmt.setString(1, l.getUsuario());

            ResultSet rs = pstmt.executeQuery();

            if(rs.next()) {

                p = new Pessoa();
                p.setNome(rs.getString("nome"));
                p.setCpf(rs.getString("cpf"));
                p.setIdPessoa(rs.getInt("idPessoas"));

                LoginDAO lDao = new LoginDAOImp();
                br.unesp.demac.bcc.soo.bean.Login login = lDao.selecionaLoginByIdPessoa(p.getIdPessoa());
                p.setLogin(login);

                EnderecoDAO eDao = new EnderecoDAOImp();
                Endereco end = eDao.selecionaEnderecoByIdPessoa(p.getIdPessoa());
                p.setEndereco(end);

                ContatoDAO cDao = new ContatoDAOImp();
                Contato cont = cDao.selecionaContadoByIdPessoa(p.getIdPessoa());
                p.setContato(cont);

            }

        } catch (SQLException e) {

            throw new Exception(e.getMessage());

        } catch (Exception e) {

            throw new Exception(e.getMessage());

        } finally {
               //FabricaConexao.fechar(con);
            return p;
        }
    }
}
